<?php
// no direct access
defined('_JEXEC') or die;

/*************************************************************************************
 * mysql.php
 * ---------
 * Author: Marjolein Katsma (marjolein.is.back@gmail.com)
 * Copyright: (c) 2008 Marjolein Katsma (http://blog.marjoleinkatsma.com/)
 * Release Version: 1.0.8.10
 * Date Started: 2008-12-12
 *
 * MySQL language file for GeSHi.
 *
 * Based on original MySQL language file by Carl FÃ¼rstenberg (2004); brought
 * up-to-date for current MySQL versions, and with more classes for different
 * types of keywords; several minor errors were corrected as well.
 *
 * Some "classes" have two groups here: this is to allow for the fact that some
 * keywords in MySQL have a double function: many of those are either a function
 * (must be immediately followed by an opening bracket) or some other keyword:
 * so they can be distinguished by the presence (or not) of that opening bracket.
 * (An immediately following opening bracket is a default rule for functions in
 * MySQL, though this may be overridden; because it's only a default, we use a
 * regex lookahead only where necessary to distinguish homonyms, not generally
 * to match any function.)
 * Other keywords with double usage cannot be distinguished and are classified
 * in the "Mix" category.
 *
 *************************************************************************************
 *
 * This file is part of GeSHi.
 *
 * GeSHi is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * GeSHi is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with GeSHi; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 *
 ************************************************************************************/

$language_data = array (
	'LANG_NAME' => 'MySQL',
	//'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'),	// '--' MUST be folowed by whitespace,not necessarily a space
	'COMMENT_SINGLE' => array(
		1 =>'-- ',
		2 => '#'
		),
	'COMMENT_REGEXP' => array(
		1 => "/(?:--\s).*?$/",						  // double dash followed by any whitespace
		),
	'COMMENT_MULTI' => array('/*' => '*/'),
	'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,			// @@@ would be nice if this could be defined per group!
	'QUOTEMARKS' => array("'", '"', '`'),
	'ESCAPE_CHAR' => '\\',							  // by default only, can be specified
	'ESCAPE_REGEXP' => array(
		1 => "/[_%]/",								  // search wildcards
		),
	'NUMBERS' =>
		GESHI_NUMBER_INT_BASIC |
		GESHI_NUMBER_OCT_PREFIX |
		GESHI_NUMBER_HEX_PREFIX |
		GESHI_NUMBER_FLT_NONSCI |
		GESHI_NUMBER_FLT_SCI_SHORT |
		GESHI_NUMBER_FLT_SCI_ZERO,
	'KEYWORDS' => array(
		1 => array(
			// Mix: statement keywords and keywords that don't fit in any other
			// category, or have multiple usage/meanings
			'ACTION','ADD','AFTER','ALGORITHM','ALL','ALTER','ANALYZE','ANY',
			'ASC','AS','BDB','BEGIN','BERKELEYDB','BINARY','BTREE','CALL',
			'CASCADED','CASCADE','CHAIN','CHECK','COLUMNS','COLUMN','COMMENT',
			'COMMIT','COMMITTED','CONSTRAINT','CONTAINS SQL','CONSISTENT',
			'CONVERT','CREATE','CROSS','DATA','DATABASES',
			'DECLARE','DEFINER','DELAYED','DELETE','DESCRIBE','DESC',
			'DETERMINISTIC','DISABLE','DISCARD','DISTINCTROW','DISTINCT','DO',
			'DROP','DUMPFILE','DUPLICATE KEY','ENABLE','ENCLOSED BY','ENGINE',
			'ERRORS','ESCAPED BY','EXISTS','EXPLAIN','EXTENDED','FIELDS',
			'FIRST','FOR EACH ROW','FORCE','FOREIGN KEY','FROM','FULL',
			'FUNCTION','GLOBAL','GRANT','GROUP BY','HANDLER','HASH','HAVING',
			'HELP','HIGH_PRIORITY','IF NOT EXISTS','IGNORE','IMPORT','INDEX',
			'INFILE','INNER','INNODB','INOUT','INTO','INVOKER',
			'ISOLATION LEVEL','JOIN','KEYS','KEY','KILL','LANGUAGE SQL','LAST',
			'LIMIT','LINES','LOAD','LOCAL','LOCK','LOW_PRIORITY',
			'MASTER_SERVER_ID','MATCH','MERGE','MIDDLEINT','MODIFIES SQL DATA',
			'MODIFY','MRG_MYISAM','NATURAL','NEXT','NO SQL','NO','ON',
			'OPTIMIZE','OPTIONALLY','OPTION','ORDER BY','OUTER','OUTFILE','OUT',
			'PARTIAL','PREV','PRIMARY KEY','PRIVILEGES','PROCEDURE','PURGE',
			'QUICK','READS SQL DATA','READ','REFERENCES','RELEASE','RENAME',
			'REPEATABLE','REQUIRE','RESTRICT','RETURNS','REVOKE',
			'ROLLBACK','ROUTINE','RTREE','SAVEPOINT','SELECT',
			'SERIALIZABLE','SESSION','SET','SHARE MODE','SHOW','SIMPLE',
			'SNAPSHOT','SOME','SONAME','SQL SECURITY','SQL_BIG_RESULT',
			'SQL_BUFFER_RESULT','SQL_CACHE','SQL_CALC_FOUND_ROWS',
			'SQL_NO_CACHE','SQL_SMALL_RESULT','SSL','START','STARTING BY',
			'STATUS','STRAIGHT_JOIN','STRIPED','TABLESPACE','TABLES','TABLE',
			'TEMPORARY','TEMPTABLE','TERMINATED BY','TO','TRANSACTIONS',
			'TRANSACTION','TRIGGER','TYPES','TYPE','UNCOMMITTED','UNDEFINED',
			'UNION','UNLOCK_TABLES','UPDATE','USAGE','USE','USER_RESOURCES',
			'USING','VALUES','VALUE','VIEW','WARNINGS','WHERE','WITH ROLLUP',
			'WITH','WORK','WRITE',
			),
		2 => array(	 //No ( must follow
			// Mix: statement keywords distinguished from functions by the same name
			"CURRENT_USER", "DATABASE", "IN", "INSERT", "DEFAULT", "REPLACE", "SCHEMA", "TRUNCATE"
			),
		3 => array(
			// Values (Constants)
			'FALSE','NULL','TRUE',
			),
		4 => array(
			// Column Data Types
			'BIGINT','BIT','BLOB','BOOLEAN','BOOL','CHARACTER VARYING',
			'CHAR VARYING','DATETIME','DECIMAL','DEC','DOUBLE PRECISION',
			'DOUBLE','ENUM','FIXED','FLOAT','GEOMETRYCOLLECTION','GEOMETRY',
			'INTEGER','INT','LINESTRING','LONGBLOB','LONGTEXT','MEDIUMBLOB',
			'MEDIUMINT','MEDIUMTEXT','MULTIPOINT','MULTILINESTRING',
			'MULTIPOLYGON','NATIONAL CHARACTER','NATIONAL CHARACTER VARYING',
			'NATIONAL CHAR VARYING','NATIONAL VARCHAR','NCHAR VARCHAR','NCHAR',
			'NUMERIC','POINT','POLYGON','REAL','SERIAL',
			'SMALLINT','TEXT','TIMESTAMP','TINYBLOB','TINYINT',
			'TINYTEXT','VARBINARY','VARCHARACTER','VARCHAR',
			),
		5 => array(	 //No ( must follow
			// Column data types distinguished from functions by the same name
			"CHAR", "DATE", "TIME"
			),
		6 => array(
			// Table, Column & Index Attributes
			'AUTO_INCREMENT','AVG_ROW_LENGTH','BOTH','CHECKSUM','CONNECTION',
			'DATA DIRECTORY','DEFAULT NULL','DELAY_KEY_WRITE','FULLTEXT',
			'INDEX DIRECTORY','INSERT_METHOD','LEADING','MAX_ROWS','MIN_ROWS',
			'NOT NULL','PACK_KEYS','ROW_FORMAT','SERIAL DEFAULT VALUE','SIGNED',
			'SPATIAL','TRAILING','UNIQUE','UNSIGNED','ZEROFILL'
			),
		7 => array(	 //No ( must follow
			// Column attribute distinguished from function by the same name
			"CHARSET"
			),
		8 => array(
			// Date and Time Unit Specifiers
			'DAY_HOUR','DAY_MICROSECOND','DAY_MINUTE','DAY_SECOND',
			'HOUR_MICROSECOND','HOUR_MINUTE','HOUR_SECOND',
			'MINUTE_MICROSECOND','MINUTE_SECOND',
			'SECOND_MICROSECOND','YEAR_MONTH'
			),
		9 => array(	 //No ( must follow
			// Date-time unit specifiers distinguished from functions by the same name
			"DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER", "SECOND", "WEEK", "YEAR"
			),
		10 => array(
			// Operators (see also Symbols)
			'AND','BETWEEN','CHARACTER SET','COLLATE','DIV','IS NOT NULL',
			'IS NOT','IS NULL','IS','LIKE','NOT','OFFSET','OR','REGEXP','RLIKE',
			'SOUNDS LIKE','XOR'
			),
		11 => array(	 //No ( must follow
			// Operator distinghuished from function by the same name
			"INTERVAL"
			),
		12 => array(
			// Control Flow (functions)
			'CASE','ELSE','END','IFNULL','IF','NULLIF','THEN','WHEN',
			),
		13 => array(
			// String Functions
			'ASCII','BIN','BIT_LENGTH','CHAR_LENGTH','CHARACTER_LENGTH',
			'CONCAT_WS','CONCAT','ELT','EXPORT_SET','FIELD',
			'FIND_IN_SET','FORMAT','HEX','INSTR','LCASE','LEFT','LENGTH',
			'LOAD_FILE','LOCATE','LOWER','LPAD','LTRIM','MAKE_SET','MID',
			'OCTET_LENGTH','ORD','POSITION','QUOTE','REPEAT','REVERSE',
			'RIGHT','RPAD','RTRIM','SOUNDEX','SPACE','STRCMP','SUBSTRING_INDEX',
			'SUBSTRING','TRIM','UCASE','UNHEX','UPPER',
			),
		14 => array(	 //A ( must follow
			// String functions distinguished from other keywords by the same name
			"INSERT", "REPLACE", "CHAR"
			),
		15 => array(
			// Numeric Functions
			'ABS','ACOS','ASIN','ATAN2','ATAN','CEILING','CEIL',
			'CONV','COS','COT','CRC32','DEGREES','EXP','FLOOR','LN','LOG10',
			'LOG2','LOG','MOD','OCT','PI','POWER','POW','RADIANS','RAND',
			'ROUND','SIGN','SIN','SQRT','TAN',
			),
		16 => array(	 //A ( must follow
			// Numeric function distinguished from other keyword by the same name
			"TRUNCATE"
			),
		17 => array(
			// Date and Time Functions
			'ADDDATE','ADDTIME','CONVERT_TZ','CURDATE','CURRENT_DATE',
			'CURRENT_TIME','CURRENT_TIMESTAMP','CURTIME','DATE_ADD',
			'DATE_FORMAT','DATE_SUB','DATEDIFF','DAYNAME','DAYOFMONTH',
			'DAYOFWEEK','DAYOFYEAR','EXTRACT','FROM_DAYS','FROM_UNIXTIME',
			'GET_FORMAT','LAST_DAY','LOCALTIME','LOCALTIMESTAMP','MAKEDATE',
			'MAKETIME','MONTHNAME','NOW','PERIOD_ADD',
			'PERIOD_DIFF','SEC_TO_TIME','STR_TO_DATE','SUBDATE','SUBTIME',
			'SYSDATE','TIME_FORMAT','TIME_TO_SEC',
			'TIMESTAMPADD','TIMESTAMPDIFF','TO_DAYS',
			'UNIX_TIMESTAMP','UTC_DATE','UTC_TIME','UTC_TIMESTAMP','WEEKDAY',
			'WEEKOFYEAR','YEARWEEK',
			),
		18 => array(	 //A ( must follow
			// Date-time functions distinguished from other keywords by the same name
			"DATE", "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER",
			"SECOND", "TIME", "WEEK", "YEAR"
			),
		19 => array(
			// Comparison Functions
			'COALESCE','GREATEST','ISNULL','LEAST',
			),
		20 => array(	 //A ( must follow
			// Comparison functions distinguished from other keywords by the same name
			"IN", "INTERVAL"
			),
		21 => array(
			// Encryption and Compression Functions
			'AES_DECRYPT','AES_ENCRYPT','COMPRESS','DECODE','DES_DECRYPT',
			'DES_ENCRYPT','ENCODE','ENCRYPT','MD5','OLD_PASSWORD','PASSWORD',
			'SHA1','SHA','UNCOMPRESS','UNCOMPRESSED_LENGTH',
			),
		22 => array(
			// GROUP BY (aggregate) Functions
			'AVG','BIT_AND','BIT_OR','BIT_XOR','COUNT','GROUP_CONCAT',
			'MAX','MIN','STDDEV_POP','STDDEV_SAMP','STDDEV','STD','SUM',
			'VAR_POP','VAR_SAMP','VARIANCE',
			),
		23 => array(
			// Information Functions
			'BENCHMARK','COERCIBILITY','COLLATION','CONNECTION_ID',
			'FOUND_ROWS','LAST_INSERT_ID','ROW_COUNT',
			'SESSION_USER','SYSTEM_USER','USER','VERSION',
			),
		24 => array(	 //A ( must follow
			// Information functions distinguished from other keywords by the same name
			"CURRENT_USER", "DATABASE", "SCHEMA", "CHARSET"
			),
		25 => array(
			// Miscellaneous Functions
			'ExtractValue','BIT_COUNT','GET_LOCK','INET_ATON','INET_NTOA',
			'IS_FREE_LOCK','IS_USED_LOCK','MASTER_POS_WAIT','NAME_CONST',
			'RELEASE_LOCK','SLEEP','UpdateXML','UUID',
			),
		26 => array(	 //A ( must follow
			// Miscellaneous function distinguished from other keyword by the same name
			"DEFAULT"
			),
		27 => array(
			// Geometry Functions
			'Area','AsBinary','AsText','AsWKB','AsWKT','Boundary','Buffer',
			'Centroid','Contains','ConvexHull','Crosses',
			'Difference','Dimension','Disjoint','Distance',
			'EndPoint','Envelope','Equals','ExteriorRing',
			'GLength','GeomCollFromText','GeomCollFromWKB','GeomFromText',
			'GeomFromWKB','GeometryCollectionFromText',
			'GeometryCollectionFromWKB','GeometryFromText','GeometryFromWKB',
			'GeometryN','GeometryType',
			'InteriorRingN','Intersection','Intersects','IsClosed','IsEmpty',
			'IsRing','IsSimple',
			'LineFromText','LineFromWKB','LineStringFromText',
			'LineStringFromWKB',
			'MBRContains','MBRDisjoint','MBREqual','MBRIntersects',
			'MBROverlaps','MBRTouches','MBRWithin','MLineFromText',
			'MLineFromWKB','MPointFromText','MPointFromWKB','MPolyFromText',
			'MPolyFromWKB','MultiLineStringFromText','MultiLineStringFromWKB',
			'MultiPointFromText','MultiPointFromWKB','MultiPolygonFromText',
			'MultiPolygonFromWKB',
			'NumGeometries','NumInteriorRings','NumPoints',
			'Overlaps',
			'PointFromText','PointFromWKB','PointN','PointOnSurface',
			'PolyFromText','PolyFromWKB','PolygonFromText','PolygonFromWKB',
			'Related','SRID','StartPoint','SymDifference',
			'Touches',
			'Union',
			'Within',
			'X',
			'Y',
			),
		),
	'SYMBOLS' => array(
		1 => array(
			/* Operators */
			'=', ':=',									  // assignment operators
			'||', '&&', '!',								// locical operators
			'=', '<=>', '>=', '>', '<=', '<', '<>', '!=',   // comparison operators
			'|', '&', '^', '~', '<<', '>>',				 // bitwise operators
			'-', '+', '*', '/', '%',						// numerical operators
			),
		2 => array(
			/* Other syntactical symbols */
			'(', ')',
			',', ';',
			),
		),
	'CASE_SENSITIVE' => array(
		GESHI_COMMENTS => false,
		1 => false,
		2 => false,
		3 => false,
		4 => false,
		5 => false,
		6 => false,
		7 => false,
		8 => false,
		9 => false,
		10 => false,
		11 => false,
		12 => false,
		13 => false,
		13 => false,
		14 => false,
		15 => false,
		16 => false,
		17 => false,
		18 => false,
		19 => false,
		20 => false,
		21 => false,
		22 => false,
		23 => false,
		24 => false,
		25 => false,
		26 => false,
		27 => false,
		),
	'STYLES' => array(
		'KEYWORDS' => array(
			1 => 'color: #990099; font-weight: bold;',	  // mix
			2 => 'color: #990099; font-weight: bold;',	  // mix
			3 => 'color: #9900FF; font-weight: bold;',	  // constants
			4 => 'color: #999900; font-weight: bold;',	  // column data types
			5 => 'color: #999900; font-weight: bold;',	  // column data types
			6 => 'color: #FF9900; font-weight: bold;',	  // attributes
			7 => 'color: #FF9900; font-weight: bold;',	  // attributes
			8 => 'color: #9900FF; font-weight: bold;',	  // date-time units
			9 => 'color: #9900FF; font-weight: bold;',	  // date-time units

			10 => 'color: #CC0099; font-weight: bold;',	  // operators
			11 => 'color: #CC0099; font-weight: bold;',	  // operators

			12 => 'color: #009900;',	 // control flow (functions)
			13 => 'color: #000099;',	 // string functions
			14 => 'color: #000099;',	 // string functions
			15 => 'color: #000099;',	 // numeric functions
			16 => 'color: #000099;',	 // numeric functions
			17 => 'color: #000099;',	 // date-time functions
			18 => 'color: #000099;',	 // date-time functions
			19 => 'color: #000099;',	 // comparison functions
			20 => 'color: #000099;',	 // comparison functions
			21 => 'color: #000099;',	 // encryption functions
			22 => 'color: #000099;',	 // aggregate functions
			23 => 'color: #000099;',	 // information functions
			24 => 'color: #000099;',	 // information functions
			25 => 'color: #000099;',	 // miscellaneous functions
			26 => 'color: #000099;',	 // miscellaneous functions
			27 => 'color: #00CC00;',	 // geometry functions
			),
		'COMMENTS' => array(
			'MULTI' => 'color: #808000; font-style: italic;',
			1 => 'color: #808080; font-style: italic;',
			2 => 'color: #808080; font-style: italic;'
			),
		'ESCAPE_CHAR' => array(
			0 => 'color: #004000; font-weight: bold;',
			1 => 'color: #008080; font-weight: bold;'	   // search wildcards
			),
		'BRACKETS' => array(
			0 => 'color: #FF00FF;'
			),
		'STRINGS' => array(
			0 => 'color: #008000;'
			),
		'NUMBERS' => array(
			0 => 'color: #008080;'
			),
		'METHODS' => array(
			),
		'SYMBOLS' => array(
			1 => 'color: #CC0099;',		 // operators
			2 => 'color: #000033;',		 // syntax
			),
		'SCRIPT' => array(
			),
		'REGEXPS' => array(
			)
		),
	'URLS' => array(
		1 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',
		2 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',
		3 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',
		4 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',
		5 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',
		6 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',
		7 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',
		8 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',
		9 => 'http://search.mysql.com/search?site=refman-%35%31&amp;q={FNAME}',

		10 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html',
		11 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html',

		12 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html',
		13 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html',
		14 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html',
		15 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/numeric-functions.html',
		16 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/numeric-functions.html',
		17 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/date-and-time-functions.html',
		18 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/date-and-time-functions.html',
		19 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/comparison-operators.html',
		20 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/comparison-operators.html',
		21 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/encryption-functions.html',
		22 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html',
		23 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/information-functions.html',
		24 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/information-functions.html',
		25 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/func-op-summary-ref.html',
		26 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/func-op-summary-ref.html',
		27 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/analysing-spatial-information.html',
		),
	'OOLANG' => false,
	'OBJECT_SPLITTERS' => array(
		),
	'REGEXPS' => array(
		),
	'STRICT_MODE_APPLIES' => GESHI_NEVER,
	'SCRIPT_DELIMITERS' => array(
		),
	'HIGHLIGHT_STRICT_BLOCK' => array(
		),
	'TAB_WIDTH' => 4,
	'PARSER_CONTROL' => array(
		'KEYWORDS' => array(
			2 => array(
				'DISALLOWED_AFTER' => '(?![\(\w])'
				),
			5 => array(
				'DISALLOWED_AFTER' => '(?![\(\w])'
				),
			7 => array(
				'DISALLOWED_AFTER' => '(?![\(\w])'
				),
			9 => array(
				'DISALLOWED_AFTER' => '(?![\(\w])'
				),
			11 => array(
				'DISALLOWED_AFTER' => '(?![\(\w])'
				),

			14 => array(
				'DISALLOWED_AFTER' => '(?=\()'
				),
			16 => array(
				'DISALLOWED_AFTER' => '(?=\()'
				),
			18 => array(
				'DISALLOWED_AFTER' => '(?=\()'
				),
			20 => array(
				'DISALLOWED_AFTER' => '(?=\()'
				),
			24 => array(
				'DISALLOWED_AFTER' => '(?=\()'
				),
			26 => array(
				'DISALLOWED_AFTER' => '(?=\()'
				)
			)
		)
);

?>